/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SMbuSource;

import controllers.LinhaJpaController;
import controllers.ParadaJpaController;
import controllers.linha_paradaJpaController;
import entidades.Linha;
import entidades.Parada;
import entidades.linha_parada;
import java.util.List;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author danielg_ramos
 */
public class Gerente {
   String telefone_resposta;
   EntityManagerFactory emf;
   
   
   public Gerente(){
       if(emf == null){
            emf = Persistence.createEntityManagerFactory("SMbuSwebPU");
       }
   }
    
   public void recebeRequest(String request, String telefone){
       telefone_resposta = telefone;
       this.interpreta(request);
   }
   
   public void enviaResposta(String resposta){
       Sender sender = new Sender();
       //sender.send(telefone_resposta, resposta);
       
   }
   
   public void interpreta(String mensagem){
       System.err.println("Mensagem original: " + mensagem);
       mensagem = mensagem.substring(11);
       int tamanho = mensagem.length();
       if(tamanho < 3){
           System.err.println("Mensagem impossivel de ser interpretada: " + mensagem);
           this.mensagemErro();
           return;
       }
       if(tamanho > 60){
           System.err.println("Mensagem impossivel de ser interpretada: " + mensagem);
           this.mensagemErro();
           return;
       }
       
       String partes[] = mensagem.split("\\s+");
       
       if(partes.length == 0){
           
           System.err.println("erro partes -> length = 0");
           System.err.println("Mensagem impossivel de ser interpretada: " + mensagem);
           this.mensagemErro();
           return;
           
       }
       boolean temEspacoAntes = false;
       if(partes[0].equals("") && partes.length > 1){
           temEspacoAntes = true;
           partes[0] = partes[1];
           if(partes.length > 2){
               partes[1] = partes[2];
           }
           else{
               String aux = partes[0];
               partes = new String[1];
               partes[0] = aux;
               
           }
       }
       
       if(temEspacoAntes){
           for(int i = 0; i < partes.length - 3; i++){
               partes[1] += " ";
               partes[1] += partes[i+3];
           }
       }
       else{
           for(int i = 0; i < partes.length - 2; i++){
               partes[1] += " ";
               partes[1] += partes[i+2];
           }
       }
       for(int i = 0; i < partes.length; i++){
           System.err.println("partes["+i+"] = " + partes[i]);
       }
       
       
       
       if(partes.length == 1){
           if(Character.isLetter(partes[0].charAt(0))){
               /*if(partes[0].length() != 4){
                   System.err.println("Mensagem impossivel de ser interpretada: " + mensagem);
                   this.mensagemErro();
                   return;
               }*/
               tipo2(partes[0]);
           }
           else{
               tipo3(partes[0]);
           }        
       }
       else{
           if(Character.isLetter(partes[0].charAt(0))){
              /* if(partes[0].length() != 4){
                   System.err.println("Mensagem impossivel de ser interpretada: " + mensagem);
                   this.mensagemErro();
                   return;
               }*/
               if(Character.isLetter(partes[1].charAt(0))){
                   tipo4(partes[0], partes[1]);
               }
               else{
                   tipo1(partes[0], partes[1]);
               }
           }
           
           
       }
       
   }
   
   
   public void tipo1(String cod, String linha){
       System.err.println("to mandando tipo1: " + cod + " " + linha);
       String resposta = pegatipo1banco(cod, linha);
       System.out.println("Resposta: " + resposta);
       enviaResposta(resposta);
   }
   public void tipo2(String cod){
       System.err.println("to mandando tipo2: " + cod); 
       enviaResposta("Os onibus que passam pela parada " + cod + " sao: 501, 502, 515");
   }
   public void tipo3(String linha){
       System.err.println("to mandando tipo3: " + linha); 
       enviaResposta("A linha " + linha + " passa pelos bairros: Bessa, Manaira, Tambau, Cabo Branco");
   }
   public void tipo4(String cod, String bairro){
       System.err.println("to mandando tipo4: " + cod + " " + bairro); 
       enviaResposta("Linhas que chegam a " + bairro + ": 503, 512, 510");

   }
   
   
   public String pegatipo1banco(String cod, String linha){
       String resposta = "";
       long idLinha = -1, idParada = -1;
       LinhaJpaController controlador = new LinhaJpaController(emf);
       List<Linha> linhas = controlador.findLinhaEntities();
       for(int i = 0; i < linhas.size(); i++){
           if(linha.equals(linhas.get(i).getNumero())){
               idLinha = linhas.get(i).getId();
           }
       }
       
       ParadaJpaController controladorP = new ParadaJpaController(emf);
       List<Parada> paradas = controladorP.findParadaEntities();
       for(int i = 0; i < paradas.size(); i++){
           if(cod.equals(paradas.get(i).getCodigo())){
               idParada = paradas.get(i).getId();
           }
       }
       
       System.out.println("Id da linha: " + idLinha);
       System.out.println("Id da parada: " + idParada);
       
       linha_paradaJpaController controladorLP = new linha_paradaJpaController(emf);
       List<linha_parada> linhas_paradas = controladorLP.findlinha_paradaEntities();
       
       for(int i = 0; i < linhas_paradas.size(); i++){
           if(linhas_paradas.get(i).getLinha().getNumero().equals(linha) && linhas_paradas.get(i).getParada().getCodigo().equals(cod)){
               System.out.println("Bingo!");
               resposta = "bingo";
               return resposta;
           }
       }
       resposta = "fail";
       
       
       return resposta;
   }
   public void mensagemErro(){
       
   }
}
